package baseKnowledge.niukeTest;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ArrayListAndLinkedList {
    public static void main(String[] args){
        /**
         *ArrayList和LinkedList的区别
         */

        Object obj=new Object();
        //ArrayList:插删慢，查询快
        /**
         * 插入后移，删除迁移
         * 数组大小固定，满了，需要重新分配空间，new一个新数组，copy旧数组
         * 连续数组，可以使用下标查询
         */
        List aList=new ArrayList();
        //LinkedList:插删快，查询慢
        /**
         * 不是连续数组，所以不可以下标查询，只能next查询
         */
        List bList=new LinkedList();

        long t1=System.currentTimeMillis();
        for(int i=0;i<50000;i++){
            //表示在索引位置为0的位置，插入5000个数据，插入一位，其他的数据往后移一位
            aList.add(0,obj);
        }
        long t2=System.currentTimeMillis()-t1;

        System.out.println("t2: "+t2);

        t1=System.currentTimeMillis();
        for(int i=0;i<50000;i++){
            //链表在插入的时候，直接插入即可，无需移动，插入在第一个位置
            bList.add(0,obj);
        }
        long t3=System.currentTimeMillis()-t1;

        System.out.println("t3: "+t3);
    }
}
